// ? Element 常用表单校验规则

/**
 *  @rule 手机号
 */
export function checkPhoneNumber(rule: any, value: any, callback: any) {
  const regexp = /^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[3-8]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[5-7]{1}))+\d{8})$/;
  if (!value) {
    return callback();
  }
  if (!regexp.test(value)) {
    return callback(new Error("请输入正确的手机号码"));
  }
  return callback();
}

/**
 *  @rule 密码
 */
export function checkPassword(rule: any, value: any, callback: any) {
  const regexp = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]{8,20}$/;
  if (!regexp.test(value)) {
    return callback(new Error("密码由8-20位大小写字母和数字组成"));
  }
  return callback();
}

/**
 *  @rule 邮箱
 */
export function checkEmail(rule: any, value: any, callback: any) {
  const regexp =
    /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])$/;
  if (!value) {
    return callback();
  }
  if (!regexp.test(value)) {
    return callback(new Error("请输入正确的邮箱格式"));
  }
  return callback();
}

/**
 *  @rule 账号
 */
export function checkAccount(rule: any, value: any, callback: any) {
  const regexp = /^[0-9A-Za-z]{1,20}$/;
  if (!regexp.test(value)) {
    return callback(new Error("账号由1-20位字母或数字组成"));
  }
  return callback();
}
